/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucsur.tp.colegio.daos;

import edu.ucsur.tp.colegio.beans.DistritoBean;
import edu.ucsur.tp.colegio.beans.ProvinciaBean;
import edu.ucsur.tp.colegio.beans.RegionBean;
import edu.ucsur.tp.colegio.beans.UsuariosBean;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import edu.ucsur.tp.colegio.connections.DBConnection;


/**
 *
 * @author Administrador
 */
public class MySqlUsuariosSchoolDao {
    
  
   // public UsuariosBean
    public UsuariosBean getUsuario(String codigoUsuario){
        
         String sql = "SELECT * FROM usuarios WHERE codigoUsuario = ?";
         
         try {
      //1. Obtener la conexi�n
      Connection conn = DBConnection.getConnection();
      
      //2. Obtenemos la sentencia Java (PreparedStatement)
      PreparedStatement pstmt = conn.prepareStatement(sql);
      //-- 2.1. Setear los par�metros din�micos
      pstmt.setString(1, codigoUsuario);
      //3. Ejecutar la sentencia (se recupera en un cursor)
      ResultSet rs = pstmt.executeQuery();
      //4. Recorriendo el cursor
      if (rs.next()) {
        UsuariosBean usuario = new UsuariosBean();
        
        usuario.setCodigoUsuario(rs.getString("codigoUsuario"));
        usuario.setClave(rs.getString("clave"));
        usuario.setNombre(rs.getString("nombre"));
        usuario.setApellido(rs.getString("apellido"));
        usuario.setFechaNacimiento(rs.getDate("fechaNacimiento"));
        usuario.setEmail(rs.getString("email"));
        usuario.setProvincia(new ProvinciaBean(rs.getString("codigoprovincia"), "codigoprovincia"));
        usuario.setRegion(new RegionBean(rs.getString("codigoregion"), "codigoregion"));
        usuario.setDistrito(new DistritoBean(rs.getString("codigodistrito"), "codigodistrito"));
        usuario.setGrupo(rs.getString("grupo"));
        usuario.setSueldo(rs.getDouble("sueldo"));
        return usuario;
      }
      //5. Cerrando los recursos JDBC
      rs.close();
      pstmt.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
    }

        
     // public List<UsuariosBean>
     public List<UsuariosBean> getListaUsuariosPorFiltros(String filtroNombre, String filtroApellido) {
    List<UsuariosBean> listaUsuarios = new ArrayList<UsuariosBean>();
    String sql = "SELECT * FROM usuarios WHERE nombre like ? AND apellido like ?";
    try {
      //1. Obtener la conexi�n
      Connection conn = DBConnection.getConnection();
      //2. Obtenemos la sentencia Java (PreparedStatement)
      PreparedStatement pstmt = conn.prepareStatement(sql);
      //-- 2.1. Setear los par�metros din�micos
      pstmt.setString(1, "%" + filtroNombre + "%");
      pstmt.setString(2, "%" + filtroApellido + "%");
      //3. Ejecutar la sentencia (se recupera en un cursor)
      ResultSet rs = pstmt.executeQuery();
      //4. Recorriendo el cursor
      while (rs.next()) {
        UsuariosBean usuario = new UsuariosBean();
        usuario.setCodigoUsuario(rs.getString("codigoUsuario"));
        usuario.setClave(rs.getString("clave"));
        usuario.setNombre(rs.getString("nombre"));
        usuario.setApellido(rs.getString("apellido"));
        usuario.setFechaNacimiento(rs.getDate("fechaNacimiento"));
        usuario.setEmail(rs.getString("email"));
        usuario.setProvincia(new ProvinciaBean(rs.getString("codigoprovincia"), "codigoprovincia"));
        usuario.setRegion(new RegionBean(rs.getString("codigoregion"), "codigoregion"));
        usuario.setDistrito(new DistritoBean(rs.getString("codigodistrito"), "codigodistrito"));
        usuario.setGrupo(rs.getString("grupo"));
        usuario.setSueldo(rs.getFloat("sueldo"));
        listaUsuarios.add(usuario);
      }
      //5. Cerrando los recursos JDBC
      rs.close();
      pstmt.close();
      conn.close();
      //6. Devolver la lista
      return listaUsuarios;
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }
      
    public void insertar(UsuariosBean usuario) {
    String sql = "INSERT INTO usuarios ( codigoUsuario, clave, nombre, apellido, fechaNacimiento, email, grupo, sueldo ) ";
    sql += " VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) ";
    try {
      //1. Obtener la conexi�n
      Connection conn = DBConnection.getConnection();
      //2. Obtenemos la sentencia Java (PreparedStatement)
      PreparedStatement pstmt = conn.prepareStatement(sql);
      //-- 2.1. Setear los par�metros din�micos
      pstmt.setString(1, usuario.getCodigoUsuario());
      pstmt.setString(2, usuario.getClave());
      pstmt.setString(3, usuario.getNombre());
      pstmt.setString(4, usuario.getApellido());
      pstmt.setDate(5, new java.sql.Date(usuario.getFechaNacimiento().getTime()));
      pstmt.setString(6, usuario.getEmail());
      pstmt.setString(7, usuario.getGrupo());
      pstmt.setDouble(8, usuario.getSueldo());
      //3. Ejecutar la sentencia (se recupera en un cursor)
      pstmt.executeUpdate();
      //7. Cerrando los recursos JDBC
      pstmt.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
      
    public void eliminar(String codigoUsuario) {
    String sql = "DELETE FROM usuarios WHERE codigoUsuario = ? ";
    try {
      //1. Obtener la conexi�n
      Connection conn = DBConnection.getConnection();
      //2. Obtenemos la sentencia Java (PreparedStatement)
      PreparedStatement pstmt = conn.prepareStatement(sql);
      //-- 2.1. Setear los par�metros din�micos
      pstmt.setString(1, codigoUsuario);
      //3. Ejecutar la sentencia (se recupera en un cursor)
      pstmt.executeUpdate();
      //7. Cerrando los recursos JDBC
      pstmt.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
      
   public void actualizar(UsuariosBean usuario) {
    String sql = "UPDATE usuarios SET clave = ?, nombre = ?, apellido = ?, fechaNacimiento = ?, email = ?, sueldo = ? WHERE codigoUsuario = ? ";
    try {
      //1. Obtener la conexi�n
      Connection conn = DBConnection.getConnection();
      //2. Obtenemos la sentencia Java (PreparedStatement)
      PreparedStatement pstmt = conn.prepareStatement(sql);
      //-- 2.1. Setear los parametros dinamicos
      pstmt.setString(1, usuario.getClave());
      pstmt.setString(2, usuario.getNombre());
      pstmt.setString(3, usuario.getApellido());
      pstmt.setDate(4, new java.sql.Date(usuario.getFechaNacimiento().getTime()));
      pstmt.setString(5, usuario.getEmail());
      pstmt.setString(6, usuario.getGrupo());
      pstmt.setDouble(7, usuario.getSueldo());
      pstmt.setString(8, usuario.getCodigoUsuario());
      //3. Ejecutar la sentencia (se recupera en un cursor)
      pstmt.executeUpdate();
      //7. Cerrando los recursos JDBC
      pstmt.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    } 
   }    

}
